iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0
Software Development

溫柔學姐的Kotlin補課/教學系列 第 24

放開那本字典:匿名函式 anonymous function

  • 分享至 

  • xImage
  •  

唯心又看了詩憶之前寫的幾個高階函式練習。「嗯⋯⋯我覺得妳與其說是對高階函式不熟,不如說是對匿名函式不熟唷。就算不指定string: String ->,在函式只有一個參數的情形下,可以直接用it;但是多個參數就要一一指名道姓囉。」

fun main() {
    meowPrint(printer = { println(it) })
}

fun meowPrint(string: String = "Hello World", printer: (String)-> Unit) {
    printer(string)
    printer("meow~")
}

她繼續說:「而且,當函式參數排在參數尾端的情形下,函式可以拉出括號之外。如果其他參數都打算使用預設值,那就連括號都可以直接拿掉。」

fun main() {
    meowPrint("Haha") { println(it) }
    meowPrint{ println(it) }
}

「如果參數就只有一個,且那個參數就是函式參數也符合這個條件嗎?」詩憶提出一個比較極端的例子。

唯心笑了笑:「那和第二個例子一樣,因為沒有傳入其他參數,括號可以整個拿掉。」她想了想,決定趁此讓詩憶學會各種寫法。「還有啊,函式除了當作參數傳入以外,也能當作回傳值唷。比如我們把各種會帶語助詞的話獨立成一個函式,然後再把函式回傳存成變數來呼叫。」

fun main() {
    val 喵君說 = 說("喵")
    val 汪君說 = 說("汪")
    喵君說("早安")
    喵君說("午安")
    汪君說("晚安")
}

fun 說(語尾詞: String) : (String)-> Unit {
    return { println("${it} ${語尾詞}~") }
}
早安 喵~
午安 喵~
晚安 汪~

「如果寫成表達式的話,還可以省去宣告回傳的型別。」唯心補充說。

fun 說(語尾詞: String) = {
    it: String -> 
    println("${it} ${語尾詞}~") 
}

上一篇
程式精煉唯熟練爾:高階函式 預設參數 high-order function, default parameter
下一篇
給別人前先包裝:套件、匯入、存取修飾詞 Packages, imports and Visibility modifiers
系列文
溫柔學姐的Kotlin補課/教學31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言